﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace syc.Juece.Report
{
    public partial class 公司调度日报表_总表二_ : System.Web.UI.Page
    {
        protected DateTime  前一日时间;
        protected HSSFWorkbook hssfworkbook;
        protected double ntaojihua = 0;//年套管计划
        protected double nyoujihua = 0;//年油管计划
        protected double ntjiegujihua = 0;//年套管接箍计划
        protected double nyjiegujihua = 0;//年油管接箍计划        

        protected double ytaojihua = 0;//月套管计划
        protected double yyoujihua = 0;//月油管计划
        protected double ytjiegujihua = 0;//月套管接箍计划
        protected double yyjiegujihua = 0;//月油管接箍计划

        protected double dtao = 0;//套管当日入库量
        protected double d1tao = 0;//一分厂套管当日入库量
        protected double d2tao = 0;//二分厂套管当日入库量
        protected double dyou = 0;//油管当日入库量
        protected double d2you = 0;//二分厂当日入库量
        protected double d5you = 0;//五分厂当日入库量
        protected int dyjiegu = 0;//油管接箍当日入库量（三分厂）
        protected int dtjiegu = 0;//套管接箍当日入库量（三分厂）

        protected double mtao = 0;//套管当月累计
        protected double m1tao = 0;//一分厂套管当月累计
        protected double m2tao = 0;//二分厂套管当月累计
        protected double myou = 0;//油管当月累计
        protected double m2you = 0;//二分厂当月累计
        protected double m5you = 0;//五分厂当月累计
        protected int myjiegu = 0;//油管接箍当月累计（三分厂）
        protected int mtjiegu = 0;//套管接箍当月累计（三分厂）

        protected double ytao = 0;//套管当年累计
        protected double y1tao = 0;//一分厂套管当年累计
        protected double y2tao = 0;//二分厂套管当年累计
        protected double yyou = 0;//油管当年累计
        protected double y2you = 0;//二分厂当年累计
        protected double y5you = 0;//五分厂当年累计
        protected int yyjiegu = 0;//油管接箍当年累计（三分厂）
        protected int ytjiegu = 0;//套管接箍当年累计（三分厂）

        protected double dtao完成率 = 0;//套管当日完成率     
        protected double dyou完成率 = 0;//油管当日完成率   
        protected double dtjiegu完成率 = 0;//套管接箍当日完成率（三分厂）
        protected double dyjiegu完成率 = 0;//油管接箍当日完成率（三分厂）

        protected double mtao完成率 = 0;//套管当月完成率     
        protected double myou完成率 = 0;//油管当月完成率   
        protected double mtjiegu完成率 = 0;//套管接箍当月完成率（三分厂）
        protected double myjiegu完成率 = 0;//油管接箍当月完成率（三分厂）

        protected double ytao完成率 = 0;//套管当年完成率       
        protected double yyou完成率 = 0;//油管当年完成率          
        protected double ytjiegu完成率 = 0;//套管接箍当年完成率（三分厂）
        protected double yyjiegu完成率 = 0;//油管接箍当年完成率（三分厂）

        protected double 套管月初库存 = 0;//套管月初库存      
        protected double 油管月初库存 = 0;//油管月初库存          
        protected double 套管接箍月初库存 = 0;//套管接箍月初库存（三分厂）
        protected double 油管接箍月初库存 = 0;//油管接箍月初库存（三分厂）

        protected double 套管当日库存 = 0;//套管当日库存      
        protected double 油管当日库存 = 0;//油管当日库存          
        protected double 套管接箍当日库存 = 0;//套管接箍当日库存（三分厂）
        protected double 油管接箍当日库存 = 0;//油管接箍当日库存（三分厂）

        protected int month;
        protected int year;
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                前一日时间 =DateTime.Parse(DateTime.Today.Year+"年"+DateTime.Today.Month+"月"+(DateTime.Today.Day-1)+"日");
                this.RiQi.Text = DateTime.Today.Year + "年" + DateTime.Today.Month + "月" + (DateTime.Today.Day - 1) + "日";
                this.Year0.SelectedValue = DateTime.Today.Year.ToString();
                this.Month0.SelectedValue = DateTime.Today.Month.ToString();               
            }      
        }

        protected void Button_Query_Click(object sender, EventArgs e)
        {
            month = int.Parse(this.Month0.SelectedValue);
            year = int.Parse(this.Year0.SelectedValue);
            SqlConnection Conn = new SqlConnection();
            Conn.ConnectionString = ConfigurationManager.ConnectionStrings["SCMConnectionString1"].ConnectionString;
            Conn.Open();
            SqlCommand Cmd = new SqlCommand();
            Cmd.Connection = Conn;
            //获得年计划
            Cmd.CommandText = @"select (isnull(套管,0)) as 月套管计划,(isnull(油管,0)) as 月油管计划,isnull(套管接箍,0) as 月套管接箍,isnull(油管接箍,0) as 月油管接箍 from 生产计划2 where 年度='" + year + "' and 月份=0";
            SqlDataReader Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                ntaojihua = Reader.GetDouble(0);
                nyoujihua = Reader.GetDouble(1);
                ntjiegujihua = Reader.GetDouble(2); 
                nyjiegujihua = Reader.GetDouble(3);                            
            }
            Reader.Close();
            //获得月计划
            Cmd.CommandText = @"select (isnull(套管,0)) as 月套管计划,(isnull(油管,0)) as 月油管计划,isnull(套管接箍,0) as 月套管接箍,isnull(油管接箍,0) as 月油管接箍 from 生产计划2 where 年度='" + year + "' and 月份='" + month + "'";
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                 ytaojihua= Reader.GetDouble(0);
                 yyoujihua = Reader.GetDouble(1);
                 ytjiegujihua= Reader.GetDouble(2);
                 yyjiegujihua= Reader.GetDouble(3);                
            }
            Reader.Close();           
            //---------------------------
            //当日入库量
            前一日时间 = DateTime.Parse(this.RiQi.Text);
            string sql = @"
            declare @d2you float
            declare @d5you float
            declare @d1tao float
            declare @d2tao float
            declare @dyjiegu int
            declare @dtjiegu int            
            declare @riqi smalldatetime
            select  @d2you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=1 and 日期='" + 前一日时间 + "'  select @d5you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=5 and 产品类别ID=1 and 日期='" + 前一日时间 + "' select @d1tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=1 and 产品类别ID=2 and 日期='" + 前一日时间 + "' select @d2tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=2 and 日期='" + 前一日时间 + "'select @dyjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=1 and 日期='" + 前一日时间 + "' select @dtjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=2 and 日期='" + 前一日时间 + "' select @d2you,@d5you,@d1tao,@d2tao,@dyjiegu,@dtjiegu";

            Cmd.CommandText = sql;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                //油管量
                d2you = Reader.GetDouble(0);
                d5you = Reader.GetDouble(1);
                //套管量
                d1tao = Reader.GetDouble(2);
                d2tao = Reader.GetDouble(3);
                //油接箍
                dyjiegu = Reader.GetInt32(4);
                dtjiegu = Reader.GetInt32(5);
                
            }
            Reader.Close();
            dyou = d2you + d5you;
            dtao = d1tao + d2tao;
            //当月入库量累计

            string sql1 = @"
            declare @m2you float
            declare @m5you float
            declare @m1tao float
            declare @m2tao float
            declare @myjiegu int
            declare @mtjiegu int
          
            declare @1yc smalldatetime 
           
            declare @2yc smalldatetime 
          
            declare @3yc smalldatetime         
                    
            declare @5yc smalldatetime 
          
            select  @1yc=起始日期 from  生产月设置 where 分厂=1 and 年度='" + year + "' and 月份='" + month + "' select  @2yc=起始日期 from  生产月设置 where 分厂=2 and 年度='" + year + "' and 月份='" + month + "' select  @3yc=起始日期 from  生产月设置 where 分厂=3 and 年度='" + year + "' and 月份='" + month + "' select  @5yc=起始日期 from 生产月设置  where 分厂=5 and 年度='" + year + "' and 月份='" + month + "' select  @m2you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=1 and 日期 between @2yc and '" + 前一日时间 + "' select  @m5you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=5 and 产品类别ID=1 and 日期 between @5yc and '" + 前一日时间 + "' select  @m1tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=1 and 产品类别ID=2 and 日期 between @1yc and '" + 前一日时间 + "' select  @m2tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=2 and 日期 between @2yc and '" + 前一日时间 + "' select @myjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=1 and 日期 between @3yc and '" + 前一日时间 + "' select @mtjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=2 and 日期 between @3yc and '" + 前一日时间 + "' select @m2you,@m5you,@m1tao,@m2tao,@myjiegu,@mtjiegu";

            Cmd.CommandText = sql1;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                //油管量
                m2you = Reader.GetDouble(0);
                m5you = Reader.GetDouble(1);
                //套管量
                m1tao = Reader.GetDouble(2);
                m2tao = Reader.GetDouble(3);
                //油接箍
                myjiegu = Reader.GetInt32(4);
                mtjiegu = Reader.GetInt32(5);
            }
            Reader.Close();
            myou = m2you + m5you;
            mtao = m1tao + m2tao;
            //当年入库量累计
            string sql2 = @"
            declare @y2you float
            declare @y5you float
            declare @y1tao float
            declare @y2tao float
            declare @yyjiegu int
            declare @ytjiegu int
           
            declare @1nc smalldatetime 
           
            declare @2nc smalldatetime 
           
            declare @3nc smalldatetime           
                       
            declare @5nc smalldatetime 
            
            select  @1nc=(select 起始日期 from  生产月设置 where 分厂=1 and 年度='" + year + "' and 月份=1) select  @2nc=(select 起始日期 from  生产月设置 where 分厂=2 and 年度='" + year + "' and 月份=1) select  @3nc=(select 起始日期 from 生产月设置 where 分厂=3 and 年度='" + year + "' and 月份=1)  select  @5nc=(select 起始日期 from 生产月设置  where 分厂=5 and 年度='" + year + "' and 月份=1) select  @y2you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=1 and 日期 between @2nc and '" + 前一日时间 + "' select  @y5you=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=5 and 产品类别ID=1 and 日期 between @5nc and '" + 前一日时间 + "' select  @y1tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=1 and 产品类别ID=2 and 日期 between @1nc and '" + 前一日时间 + "' select  @y2tao=isnull(sum(入库重量),0)/1000 from 生产进度 where 分厂ID=2 and 产品类别ID=2 and 日期 between @2nc and '" + 前一日时间 + "' select @yyjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=1 and 日期 between @3nc and '" + 前一日时间 + "' select @ytjiegu=isnull(sum(磷化支数),0) from 生产进度3 where [产品类别ID]=2 and 日期 between @3nc and '" + 前一日时间 + "' select @y2you,@y5you,@y1tao,@y2tao,@yyjiegu,@ytjiegu";

            Cmd.CommandText = sql2;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                //油管量
                y2you = Reader.GetDouble(0);
                y5you = Reader.GetDouble(1);
                //套管量
                y1tao = Reader.GetDouble(2);
                y2tao = Reader.GetDouble(3);
                //油接箍
                yyjiegu = Reader.GetInt32(4);
                ytjiegu = Reader.GetInt32(5);
            }
            Reader.Close();
            yyou = y2you + y5you;
            ytao = y1tao + y2tao;

            //当月累计完成率
            if (ytaojihua == 0)
            {
                mtao完成率 = 0;
            }
            else
            {
                mtao完成率 = ((mtao / ytaojihua) * 100);
            }
            if (yyoujihua == 0)
            {
                myou完成率 = 0;
            }
            else
            {
                myou完成率 = ((myou / yyoujihua) * 100);
            }
            if (yyjiegujihua == 0)
            {
                myjiegu完成率 = 0;
            }
            else
            {
                myjiegu完成率 = ((myjiegu / yyjiegujihua) * 100);
            }
            if (ytjiegujihua == 0)
            {
                mtjiegu完成率 = 0;
            }
            else
            {
                mtjiegu完成率 = ((mtjiegu / ytjiegujihua) * 100);
            }
            //当年累计完成率
            if (ntaojihua == 0)
            {
                ytao完成率 = 0;
            }
            else
            {
                ytao完成率 = ((ytao / ntaojihua) * 100);
            }
            if (nyoujihua == 0)
            {
                yyou完成率 = 0;
            }
            else
            {
                yyou完成率 = ((yyou / nyoujihua) * 100);
            }
            if (ntjiegujihua == 0)
            {
                ytjiegu完成率 = 0;
            }
            else
            {
                ytjiegu完成率 = ((ytjiegu / ntjiegujihua) * 100);
            }
            if (nyjiegujihua == 0)
            {
                yyjiegu完成率 = 0;
            }
            else
            {
                yyjiegu完成率 = ((yyjiegu / nyjiegujihua) * 100);
            }
            Conn.Close();
            Reader.Dispose();
            Cmd.Dispose();
            Conn.Dispose();
        }

        protected void WriteToFile()
        {           
            Response.ContentType = "application/ms-excel";
            Response.AddHeader("content-disposition", "attachment; filename=\"" + DateTime.Today.ToShortDateString() + ".xls\"");
            hssfworkbook.Write(Response.OutputStream);
        }

        protected void InitializeWorkbook()
        {

            FileStream file = new FileStream(HttpContext.Current.Server.MapPath("/JueCe/模板/公司调度日报表(总表二).xls"), FileMode.Open, FileAccess.Read);

            hssfworkbook = new HSSFWorkbook(file);

            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "陕西延长石油(集团)公司调度日报表(总表二)";
            hssfworkbook.DocumentSummaryInformation = dsi;

            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "报表";
            si.Title = "陕西延长石油(集团)公司调度日报表(总表二)";
            hssfworkbook.SummaryInformation = si;
        }
        protected void Button_Save_Click(object sender, EventArgs e)
        {
            InitializeWorkbook();
            HSSFSheet sheet1 = hssfworkbook.GetSheet("公司调度日报表(总表二)");           
            sheet1.GetRow(1).GetCell(4).SetCellValue("统计时间：" + DateTime.Today.Year + "年" + DateTime.Today.Month + "月" + (DateTime.Today.Day) + "日");
            Button_Query_Click(null, null);
            sheet1.GetRow(4).GetCell(2).SetCellValue(ntaojihua);
            sheet1.GetRow(4).GetCell(3).SetCellValue(ytaojihua);
            sheet1.GetRow(4).GetCell(4).SetCellValue(dtao);
            sheet1.GetRow(4).GetCell(5).SetCellValue(mtao.ToString("0.000"));
            sheet1.GetRow(4).GetCell(6).SetCellValue(ytao.ToString("0.000"));
            sheet1.GetRow(4).GetCell(7).SetCellValue(dtao完成率);
            sheet1.GetRow(4).GetCell(8).SetCellValue(mtao完成率.ToString("0.0"));
            sheet1.GetRow(4).GetCell(9).SetCellValue(ytao完成率.ToString("0.00"));
            sheet1.GetRow(4).GetCell(11).SetCellValue(套管月初库存);
            sheet1.GetRow(4).GetCell(12).SetCellValue(套管当日库存);

            sheet1.GetRow(5).GetCell(2).SetCellValue(nyoujihua);
            sheet1.GetRow(5).GetCell(3).SetCellValue(yyoujihua);
            sheet1.GetRow(5).GetCell(4).SetCellValue(dyou);
            sheet1.GetRow(5).GetCell(5).SetCellValue(myou.ToString("0.000"));
            sheet1.GetRow(5).GetCell(6).SetCellValue(yyou.ToString("0.000"));
            sheet1.GetRow(5).GetCell(7).SetCellValue(dyou完成率);
            sheet1.GetRow(5).GetCell(8).SetCellValue(myou完成率.ToString("0.0"));
            sheet1.GetRow(5).GetCell(9).SetCellValue(yyou完成率.ToString("0.00"));
            sheet1.GetRow(5).GetCell(11).SetCellValue(油管月初库存);
            sheet1.GetRow(5).GetCell(12).SetCellValue(油管当日库存);

            sheet1.GetRow(6).GetCell(2).SetCellValue((ntjiegujihua * 6.1) / 1000);
            sheet1.GetRow(6).GetCell(3).SetCellValue((ytjiegujihua * 6.1) / 1000);
            sheet1.GetRow(6).GetCell(4).SetCellValue((dtjiegu*6.1)/1000);
            sheet1.GetRow(6).GetCell(5).SetCellValue(((mtjiegu*6.1)/1000).ToString("0.000"));
            sheet1.GetRow(6).GetCell(6).SetCellValue(((ytjiegu*6.1)/1000).ToString("0.000"));
            sheet1.GetRow(6).GetCell(7).SetCellValue(dtjiegu完成率);
            sheet1.GetRow(6).GetCell(8).SetCellValue(mtjiegu完成率.ToString("0.0"));
            sheet1.GetRow(6).GetCell(9).SetCellValue(ytjiegu完成率.ToString("0.00"));
            sheet1.GetRow(6).GetCell(11).SetCellValue(套管接箍月初库存);
            sheet1.GetRow(6).GetCell(12).SetCellValue(套管接箍当日库存);

            sheet1.GetRow(7).GetCell(2).SetCellValue((nyjiegujihua * 2.3) / 1000);
            sheet1.GetRow(7).GetCell(3).SetCellValue((yyjiegujihua * 2.3) / 1000);
            sheet1.GetRow(7).GetCell(4).SetCellValue((dyjiegu*2.3)/1000);
            sheet1.GetRow(7).GetCell(5).SetCellValue(((myjiegu*2.3)/1000).ToString("0.000"));
            sheet1.GetRow(7).GetCell(6).SetCellValue(((yyjiegu*2.3)/1000).ToString("0.000"));
            sheet1.GetRow(7).GetCell(7).SetCellValue(dyjiegu完成率);
            sheet1.GetRow(7).GetCell(8).SetCellValue(myjiegu完成率.ToString("0.0"));
            sheet1.GetRow(7).GetCell(9).SetCellValue(yyjiegu完成率.ToString("0.00"));
            sheet1.GetRow(7).GetCell(11).SetCellValue(油管接箍月初库存);
            sheet1.GetRow(7).GetCell(12).SetCellValue(油管接箍当日库存);
            //string op = (string)this.Session["OperatorName"];
            //if (op != null)
            //{
            //    sheet1.GetRow(9).GetCell(5).SetCellValue(op);
            //}
            //sheet1.ForceFormulaRecalculation = true;
            WriteToFile();
            Response.End();
        }
    }
}
